package com.aseo.business.hibernate;

import java.util.List;
import java.util.Set;

import javax.annotation.Resource;
import javax.validation.ConstraintViolation;

import org.springframework.stereotype.Service;

import com.aseo.exception.ConstraintViolationException;
import com.aseo.model.dao.Dao;
import com.aseo.model.entity.hibernate.Contenedor;
import com.aseo.model.entity.hibernate.PuntoRecoleccion;
import com.aseo.util.Estado;

@Service
public class ContenedorManager implements ManagerInterface<Contenedor> {

	@Resource
	private Dao dao;

	@Override
	public List<Contenedor> getAll() {
		final List<Contenedor> list = dao.find(Contenedor.class);
		return list;
	}

	@Override
	public void persist(Contenedor contenedor) {
		dao.persist(contenedor);
	}

	public void validate(Contenedor contenedor)
			throws ConstraintViolationException {

		Set<ConstraintViolation<Contenedor>> constraintViolations = dao
				.validate(contenedor);

		for (ConstraintViolation<Contenedor> constraintViolation : constraintViolations) {
			throw new ConstraintViolationException(constraintViolation
					.getMessage());
		}

	}

	public List<Contenedor> getActivos() {
		final List<Contenedor> list = dao
				.find("select contenedor from com.aseo.model.entity.hibernate.Contenedor contenedor where contenedor.estado = "
						+ Estado.ACTIVO);
		return list;
	}

	public List<PuntoRecoleccion> getPuntosRecoleccionActivos(
			Contenedor contenedor) {
		List<PuntoRecoleccion> list = dao
				.find("select punto from com.aseo.model.entity.hibernate.PuntoRecoleccionH punto where punto.estado = "
						+ Estado.ACTIVO
						+ " and"
						+ " punto.contenedorId.contenedorId = "
						+ contenedor.getContenedorId());
		return list;
	}

	public List<PuntoRecoleccion> getPuntosRecoleccionInactivos(
			Contenedor contenedor) {
		List<PuntoRecoleccion> list = dao
				.find("select punto from com.aseo.model.entity.hibernate.PuntoRecoleccionH punto where punto.estado = "
						+ Estado.INACTIVO
						+ " and"
						+ " punto.contenedorId.contenedorId = "
						+ contenedor.getContenedorId());
		return list;
	}
}
